#include <stdio.h>
#include <math.h>
#define MAKS 10

void input_matriks();
void tampil_matriks();
void obe(int); 
void hitung_akar();

int brs, klm, n=2; 
//float A[3][4] = {{1,1,1,6}, {1,2,-1,2}, {2,1,2,10}};
//float A[2][3] = {{15,13.21306,105.6168}, {13.21306,17.0079,92.62943}};
float A[2][3] = {{15,-6.45821,29.12495}, {-6.45821,13.51509,-12.716}};
//float A[MAKS][MAKS], b[MAKS];
float b[MAKS];

void main(){
	puts("ELIMINASI GAUSS NAIF\n");
//	input_matriks();
	puts("Matriks A = ");
	tampil_matriks();
	for(klm=0; klm<n-1; klm++)
		obe(klm);
	
	for(brs=0; brs<n; brs++)
		b[brs] = A[brs][n];

	puts("\nMatriks hasil eliminasi GAUSS : ");
	tampil_matriks();
	hitung_akar();
}

void input_matriks() {
	printf("Berapa ukuran ordo matriks ? ");
	scanf("%d", &n);
	fflush(stdin);
	for(brs=0; brs<n; brs++) {
		for(klm=0; klm<=n; klm++) {
			printf("Elemen matriks A[%d][%d] = ", brs+1, klm+1);
			scanf("%f", &A[brs][klm]);
		}
		puts("");
	}
}
 
void obe(int b){
	float kons;
	int j, k;		//i mewakili baris, j=kolom

	for(j=b+1; j<n; j++) {
		kons = A[j][b] / A[b][b];	
		for(k=0; k<n+1; k++)
			 A[j][k] = A[j][k] - kons * A[b][k];
	}
}

void hitung_akar(){
	int i, j, k;
	float x[MAKS], sigma=0;

	x[n-1] = b[n-1] / A[n-1][n-1];
	for(k=n-2; k>=0; k--) {
		sigma = 0;
		for(j=k+1; j<n; j++)  
			sigma = sigma + A[k][j] * x[j]; 

		x[k] = (b[k] - sigma) / A[k][k];
	}

	for(i=0; i<n; i++) 
		printf("X%d = %g\n", i+1, x[i]);

}

void tampil_matriks(){
	for(brs=0; brs<n; brs++)
	{
		for(klm=0; klm<=n; klm++)
			printf("%g    ", A[brs][klm]);
		puts("");
	}
	puts("");
}